package com.nt.train.config;
import com.nt.train.service.ListService;
import com.nt.train.service.condition.LinuxCondition;
import com.nt.train.service.condition.LinuxListServiceImpl;
import com.nt.train.service.condition.WindowsCondition;
import com.nt.train.service.condition.WindowsListServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
/**
 * @Conditional注解调用条件判断的类并根据返回的结果来创建Bean
 * @author hlf
 * @version 1.0
 * @date 2022/8/9 16:21
 */
@Configuration
public class ConditionConfig {

    /**  自定义条件注入处理  start --*/
    @Bean
    @Conditional(WindowsCondition.class)
    public ListService windowsListService() {
        return new WindowsListServiceImpl();
    }

    @Bean
    @Conditional(LinuxCondition.class)
    public ListService linuxListService() {
        return new LinuxListServiceImpl();
    }
    /**  自定义条件注入处理  end --*/
}

/**
 单个值（key必须存在，且value必须是指定值）
 @ConditionalOnProperty("config1.enable", havingValue="true")

 单个值（key必须存在，不关心value）
 @ConditionalOnProperty("config1.enable")

 多个值（多个key必须存在，且value必须都是指定值）
 @ConditionalOnProperty(name={"config1.enable","config.all"}, havingValue="true")

 多个值（多个key必须存在，不关心value）
 @ConditionalOnProperty(name={"config1.enable","config.all"})

 @ConditionalOnClass
 用法1：通过class指定
 import a.b.c.Xxx;
 @ConditionalOnClass(Xxx.class)
 也可以指定多个
 import a.b.c.Xxx;
 @ConditionalOnClass({Xxx.class, Yyy.class})
 用法2：通过类的全路径名指定
 @ConditionalOnClass("a.b.c.Xxx")
 也可以指定多个
 @ConditionalOnClass({"a.b.c.Xxx", "a.b.c.Yyy"})

 */
